{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Hands-on 1: Multiplexação OFDM (ortogonalidade, transmissão e recepção, desempenho em canal AWGN)\n",
    "\n",
    "# Objetivos\n",
    "As metas desse tutorial são ajudar o usuário a:\n",
    "- Entender a modelagem da multiplexação OFDM;\n",
    "- Entender o processo de ortogalização entre subportadoras OFDM;\n",
    "- Entender a modelagem da demultiplexação OFDM;\n",
    "- Demonstrar o processo de demultiplexação OFDM em canais AWGN.\n",
    "\n",
    "# Transmissão digital por multiplexação de multiportadoras\n",
    "\n",
    "Uma modelo bem simples de uma cadeia de comunicação digital pode ser representada pelo diagrama de blocos mostrado a seguir.\n",
    "\n",
    "![fig_diagrama_singlecompleto](./FIGS/HD_01/diagrama_single_completo.png)\n",
    "\n",
    "O objetivo geral é que as mensagens (sequências de bits) sejam transmitidas da **fonte de dados** (\\textit{Data Source}) para o **coletor de dados** (\\textit{Data Sink}). O transmissor consiste em: um mapeador de símbolos (\\textit{Symbol Mapper}), que converte os bits em amplitudes; um filtro de transmissão (\\textit{Transmit Filter}), que gera um sinal de banda base analógico; e um modulador, que converte o sinal da banda-base para uma frequência mais alta adequada para transmissão através do canal (\\textit{Bandpass Channel}). O receptor consiste em: um demodulador (\\textit{Demodulator}), para converter o sinal recebido em banda-passante de volta para a banda-base; um detector, que filtra (\\textit{Detector}) e amostra o sinal banda-base; e um dispositivo de decisão (\\textit{Decision Device}), que estima o valor de cada bit transmitido.\n",
    "\n",
    "Sistemas contemporâneos como o o LTE, o Wi-Fi e o WiMaX adicionam a **multiplexação por multiportadoras** em sua cadeia de transmissão digital, ganhando em proteção contra desvanecimento por multipercursos e interferência co-canal, bem como aumentando a taxa de transmissão devido a multiplexação de dados. Em tais sistemas, um ou mais esquemas de multiplexação são utilizados, a citar:\n",
    "- OFDM (_Orthogonal Frequency Division Multiplex_): Sistemas Wi-Fi;\n",
    "- OFDMA (_Orthogonal Frequency Division Multiple Access_): Sistemas LTE e WiMaX\n",
    "- SC-FDMA (_Single Frequency Division Multiple Access_): Sistemas LTE;\n",
    "\n",
    "Dadas as suas vantagens e o sucesso com os sistemas 4G, a multiplexação por multiportadoras é alvo de estudos para compor também o 5G. Neste Hands-on, entenderemos melhor o funcionamento do OFDM, compreendendo e analisando suas vantagens e desvantagens."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Prática 1:  Divisão na frequência e ortogonalidade\n",
    "\n",
    "Em modulações de múltiplas portadoras, a largura de banda disponível é subdividida em um número de subcanais (ou subportadoras) de mesma largura de banda, como visto abaixo:\n",
    "\n",
    "![Figura01](./FIGS/HD_01/Figura_1.png)\n",
    "\n",
    "A quantidade de subcanais é dada por $K = W/\\Delta f$, sendo $W$ a largura de banda total, e $\\Delta f$ a separação entre subportadoras adjacentes. Assim, símbolos de informação diferentes são transmitidos simultaneamente e de forma síncrona nos $K$ subcanais. Os dados aqui (mostrados na Figura 1) são transmitidos por multiplexação por divisão de frequência (FDM).\n",
    "\n",
    "Para cada subcanal, associaremos uma portadora:\n",
    "\n",
    "$$ x_{k}(t)=sen(2\\pi f_{k} t), $$ \n",
    "\n",
    "sendo $k=0,1,...,K-1$ e $f_{k}$ a frequência central do canal $k$. Escolhendo uma taxa de símbolo $1/T$ em cada um dos subcanais com largura de banda igual a $\\Delta f $, deseja-se que:\n",
    "\n",
    "$$ \\int_{0}^{T}sen(2 \\pi f_{k} t + \\varphi_{k}) \\cdot sen(2 \\pi f_{j} t + \\varphi_{j}) = 0, $$ \n",
    "\n",
    "sendo $\\left (f_{k} − f_{j}\\right ) = \\frac {n}{T}$, com $n$ até o tamanho que se deseje. E essa relação é verdadeira para quaisquer $\\varphi _{k}$ e $\\varphi _{j}$ . Ou seja, as subportadoras são ortogonais na duração de símbolo $T$, independentemente da fase entre as duas subportadoras.\n",
    "Com essa restrição, a multiplexação se torna por Divisão Ortogonal de Frequência (OFDM). \n",
    "\n",
    "O sistema OFDM é utilizado para evitar os efeitos da interferência entre subportadoras. As subportadoras são arranjadas de tal forma que no centro de suas frequências se tenha um nulo, como mostra a figura a seguir.\n",
    "\n",
    "![Figura02](./FIGS/HD_01/Figura_2.png)\n",
    "\n",
    "Se $T_{s}$ é o intervalo de símbolo em um sistema de portadora única, o intervalo de símbolo em um sistema OFDM de $K$ subcanais é $T = K \\cdot T_{s}$. Na figura a seguir, vemos um caso no qual o multipercurso causa um espalhamento temporal significativo, fazendo com que sua parte final ultrapasse o tempo de símbolo e ocupe o tempo do próximo símbolo. Essa interferência é comum em sistemas OFDM e pode ser tratada deixando um tempo de guarda entre os símbolos. Esse tempo deve ser escolhido de forma a ser maior que o espalhamento causado pelo canal. Esse assunto não é foco deste hands-on.\n",
    "\n",
    "![Figura03](./FIGS/HD_01/Figura_3.png)\n",
    "\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Descrição do experimento\n",
    "\n",
    "Sendo duas subportadoras de um sinal OFDM: \n",
    "\n",
    "$$ x_{k}(t) = sen(2\\pi f_{k} t + \\phi_{k} )   $$\n",
    "\n",
    "$$ x_{j}(t) = sen(2\\pi f_{j} t + \\phi_{j} ), $$\n",
    "\n",
    "para $0 \\leq t \\leq T.$\n",
    "\n",
    "Considerando $f_{k} = 2$ Hz e $f_{j} = f_{k} + n/T$, com $ n = 1, 2, 3$; e as fases $\\phi_{k}$ e $\\phi_{j}$\n",
    "arbitrárias, variando de $ [0,2\\pi]$. Demonstre a propriedade da ortogonalidade usando os sinais amostrados $x_{k}(mT_{s})$  e $x_{j}(mT_{s})$, com\n",
    ">$T_{s} = 1/5 \\; s $ \n",
    "\n",
    ">$T = 10 \\; s $ \n",
    "\n",
    ">$M = T/T_{s} = 50 \\rightarrow $ Número de subcanais \n",
    "\n",
    ">$m = 0,1,2, \\; ... M − 1 = 0,1,2, \\; ... , 49 $\n",
    "\n",
    "**Passo 01:** Abra um script no Matlab, salve-o como **handson10_1.m** e escreva o seguinte código:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "O resultado para n=1 é: 4.8982e-14\n",
      "O resultado para n=2 é: 2.2801e-14\n",
      "O resultado para n=3 é: 5.0709e-14\n"
     ]
    }
   ],
   "source": [
    "clc;clear all;close all;\n",
    "% Passo 1: Geração de fases aleatórias\n",
    "phi_k = 2*pi*rand;\n",
    "phi_j = 2*pi*rand; \n",
    "%\n",
    "% Passo 2: Geração de sinais amostrados \n",
    "M = 50;\n",
    "m = 0:M-1;\n",
    "x_k = sin(4*pi*m/5+phi_k);\n",
    "n = 1;\n",
    "x_j_1 = sin(4*pi*m/5+2*pi*m*n/M+phi_j);\n",
    "n = 2;\n",
    "x_j_2 = sin(4*pi*m/5+2*pi*m*n/M+phi_j);\n",
    "n = 3;\n",
    "x_j_3 = sin(4*pi*m/5+2*pi*m*n/M+phi_j);\n",
    "%\n",
    "% Passo 3: Verificação de ortogonalidade  \n",
    "Sum1 = sum(x_k.*x_j_1);\n",
    "disp(['O resultado para n=1 é: ' , num2str(Sum1)])\n",
    "Sum2 = sum(x_k.*x_j_2);\n",
    "disp(['O resultado para n=2 é: ' , num2str(Sum2)])\n",
    "Sum3 = sum(x_k.*x_j_3);\n",
    "disp(['O resultado para n=3 é: ' , num2str(Sum3)])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Comentários sobre o código\n",
    "\n",
    "- Inicialmente (Passo 1), geramos fases aleatórias $\\phi_{k}$ e $\\phi_{j}$. Com  $\\phi_{k}$ sendo para a primeira subportadora e $\\phi_{j}$ para as demais. Lembre que a função $rand()$ gera um número aleatório entre 0 e 1.\n",
    "> ```python\n",
    "% Passo 1: Geração de fases aleatórias\n",
    "phi_k = 2*pi*rand;\n",
    "phi_j = 2*pi*rand; \n",
    "```\n",
    "\n",
    "- Em seguida (Passo 2), definimos as variáveis $M$ e $ n$, além de gerar os sinais das suportadoras.\n",
    "Como os sinais são amostrados, representamos o eixo do tempo como $ t = m \\, T_{s}$, sendo $m \\in \\mathbb{Z}$  tal que $m=[0,49]$:\n",
    "$$  x_{k}(t)=x_{k}\\left ( mT_{s}\\right ) = sen \\left ( 2\\pi f_{k} \\left ( mT_{s} \\right ) +\\phi_{k} \\right )$$\n",
    "Ao substituir $\\left\\{\\begin{matrix}f_{k} =&2Hz\\\\ T_{s}= &1/5 s\\end{matrix}\\right.$, obtemos:\n",
    "$$  x_{k}\\left ( mT_{s}\\right ) =  sen \\left ( 4\\pi \\left ( mT_{s} \\right ) +\\phi_{k} \\right )  = sen \\left ( \\frac{4\\pi m}{5}+\\phi_{k} \\right )  $$\n",
    "Já para cada $x_{j}$, cuja frequência é dada por $f_{j} = f_{k} + n/T $, podemos escrever:\n",
    "$$ x_{j}\\left ( mT_{s} \\right ) =  sen \\left [ 2\\pi \\, \\left ( f_{k}+n/T\\right )   \\, \\left ( mT_{s}\\right ) +\\phi_{j}\\right ]  = sen\\left [ 2\\pi \\;f_{k}  \\; mT_{s} +2\\pi \\;  mn\\; \\left ( T_{s}/T \\right ) +\\phi_{j}\\right ] $$\n",
    "Ao substituir  $\\left\\{\\begin{matrix}T_{s} =&1/5\\, s\\\\ T = &10\\, s\\\\ f_{k} = & 2 Hz\\end{matrix}\\right.$, podemos escrever:\n",
    "$$  x_{j}\\left ( mT_{s} \\right ) =sen \\left ( \\frac{4\\pi m} { 5} +\\frac{ 2\\pi mn}{50}+ \\phi_{j}\\right ),  $$\n",
    "sendo $n=j=1,2,3$\n",
    "Veja que nessa passo um sinal $x_k$ e três sinais $x_j$ são criados:\n",
    ">```python\n",
    "% Passo 2: Geração de sinais amostrados \n",
    "M = 50;\n",
    "m = 0:M-1;\n",
    "x_k = sin(4*pi*m/5+phi_k);\n",
    "n = 1;\n",
    "x_j_1 = sin(4*pi*m/5+2*pi*m*n/M+phi_j);\n",
    "n = 2;\n",
    "x_j_2 = sin(4*pi*m/5+2*pi*m*n/M+phi_j);\n",
    "n = 3;\n",
    "x_j_3 = sin(4*pi*m/5+2*pi*m*n/M+phi_j);\n",
    "```\n",
    "- A ortogonalidade é comprovada em seguida (Passo 3). Dois sinais são ditos ortogonais se:\n",
    "$$ \\int_{0}^{T} x_{k}(t) \\cdot x_{j}(t) = 0$$\n",
    "Aplicando ao nosso caso\n",
    "$$ \\int_{0}^{T} \\left (sen(2\\pi f_{k}t+\\phi_{k}) \\cdot sen(2\\pi f_{j}t+\\phi_{j})\\right ) dt = 0$$\n",
    "Como tratamos de sinais discretos (amostrados):\n",
    "$$ \\sum_{m=0}^{49}x_{k}(mT_{s})\\cdot x_{j}(mT_{s}) $$\n",
    "Calculando no Matlab os três somatórios, para cada valor de $n$:\n",
    ">```python\n",
    "% Passo 3: Verificação de ortogonalidade  \n",
    "Sum1 = sum(x_k.*x_j_1);\n",
    "disp(['O resultado para n=1 é: ' , num2str(Sum1)])\n",
    "Sum2 = sum(x_k.*x_j_2);\n",
    "disp(['O resultado para n=2 é: ' , num2str(Sum2)])\n",
    "Sum3 = sum(x_k.*x_j_3);\n",
    "disp(['O resultado para n=3 é: ' , num2str(Sum3)])\n",
    "```\n",
    "\n",
    "- Como é evidenciado na execução do código, esses valores são praticamente zero, de modo que dessa forma comprovamos a ortogonalidade entre as subportadoras $x_{k}(t)$ e $x_{j}(t)$ para quaisquer valores de $\\phi_{k}$ e $\\phi_{j}$."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Prática 2: Transmissão de um sinal OFDM\n",
    "\n",
    "Um esquema simplificado do transmissor $OFDM$ é mostrado na figura:\n",
    "\n",
    "![fig_Figura04](./FIGS/HD_01/Figura_4.png)\n",
    "\n",
    "Pela figura, a multiplexação por subportadoras do OFDM é obtida por meio da IFFT no transmissor, responsável por juntar as várias subportadoras em um único sinal. Já no receptor, a separação das subportadoras é realizada pela FFT.\n",
    "\n",
    "A modulação QAM (_Quadrature Amplitude Modulation_) é usada em sistemas mais modernos devido sua maior eficiência espectral. No sistema LTE, por exemplo, a modulação pode ser do tipo QPSK (Quadrature Phase Shift Keying), 16-QAM, 64-QAM ou 256-QAM. A modulação M-QAM é explora fase e amplitude do sinal no processo de modulação. Esse tipo de modulação é constituído de $M$ símbolos, cada qual representado por $k = log_{2}(M)$ bits. Neste hands-on, utilizaremos o OFDM com 16-QAM. Ou seja, existirão 16 símbolos, cada um com uma respectiva amplitude e fase, representando uma sequência de 4 bits, como mostrado no diagrama de constelação a seguir.\n",
    "\n",
    "![Figura05](./FIGS/HD_01/Figura_5.png)\n",
    "\n",
    "Assim, cada símbolo QAM pode ser escrito como um número complexo, como mostrado na tabela a seguir. Entretanto, é importante enfatizar que podemos representar a sequência de 4 bits com fases e amplitudes diferentes das mostradas na figura e na tabela. Ou seja, aqui estamos representando a sequência $1010 $ como $1 + 1j$, mas pode existir outra constelação em que essa mesma sequência seja representada por $ 3 − 3j$, por exemplo. O importante é, independente de como é construído, o diagrama de constelação precisa ser conhecido tanto no transmissor quanto no receptor. Isso geralmento é definido nas especificações técnicas de cada sistema.\n",
    "\n",
    "Tabela 1: Correspondência entre os símbolos 16-QAM e os valores binários e decimais.\n",
    "\n",
    "| Número em decimal |   Número em binário        | Número complexo correspondente à constelação 16-QAM ($X_{k}$)|\n",
    "|:------:|:-------------:|:-----:|\n",
    "|0 |0000|-3-3j|\n",
    "|1 |0001|-3-1j|\n",
    "|2 |0010|-3+1j|\n",
    "|3 |0011|-3+3j|\n",
    "|4 |0100|-1-3j|\n",
    "|5 |0101|-1-1j|\n",
    "|6 |0110|-1+1j|\n",
    "|7 |0111|-1+3j|\n",
    "|8 |1000|1-3j |\n",
    "|9 |1001|1-1j |\n",
    "|10|1010|1+1j |\n",
    "|11|1011|1+3j |\n",
    "|12|1100|3-3j |\n",
    "|13|1101|3-1j |\n",
    "|14|1110|3+1j |\n",
    "|15|1111|3+3j |\n",
    "\n",
    "\n",
    "Já um símbolo OFDM é geradop por meio de K subportadoras independentes, em que cada subportadora é modulada por símbolos a partir de uma constelação QAM, obtendo ao final um valor complexo. Dessa forma, cada ponto de valor complexo corresponde à informação de uma respectiva subportadora $x_{k}$ , sendo $k=0, 1, ... K-1$. Assim, os símbolos de informação $X_{k}$ representam os valores de entrada uma IDFT que gera o sinal OFDM, no nosso caso, sendo QAM a modulação de cada portadora. A IDFT deve obedecer à simetria $X_{N−k} = X_{k}^{*} $, sendo $X_{k}^{*}$ o conjugado de $X_{k}$. Para fazer isso, basta concatenar o vetor $X_{k}$ com $X_{k}^{*}$ na ordem inversa (como veremos a seguir). Dessa forma, cria-se, a partir de $K$ símbolos de informação, uma sequência de $N=2K$\n",
    "símbolos, a qual chamaremos de $X_{k}^{'}$.\n",
    "Com isso, montamos a IDFT com $X_{k}^{'}$, obtendo o sinal $x_{n}$ como:\n",
    "$$x_{n}= \\frac{1}{\\sqrt{N}}    \\sum_{k=0}^{N-1}X_{k}^{'} e^{j2\\pi n \\frac{k}{N} },$$\n",
    "com $n=1, 2, ..., N-1 $ e $1/ \\sqrt{N}$ sendo simplesmente um fator de escala. O sinal $x_{n}$ representa as amostras de um símbolo OFDM $x(t)$ composto das múltiplas subportadoras. Sendo  $ x_{n} = x\\left ( \\frac{nT}{N}   \\right) $, $x(t)$ pode ser representado por:\n",
    "$$x(t)= \\frac{1}{\\sqrt{N}}    \\sum_{k=0}^{N-1}X_{k}^{'} e^{j2\\pi n \\frac{kt}{T} }$$,\n",
    "para $0\\leq t \\leq T$, sendo $T$ a duração/intervalo do sinal (duração do símbolo OFDM).\n",
    "\n",
    "### Descrição do experimento\n",
    "\n",
    "O experimento dessa prática consiste em gerar um sinal OFDM $x$ com $100$ bits pseudoaleatórios, modulação 16-QAM, $T = 50$ segundos e $T_{s} = 2 $ segundos. Desejamos mostrar a forma de onda de $x(t)$ e, em seguida, computar os valores de $x_{n}$, mostrando graficamente que $ x_{n} = x\\left ( \\frac{nT}{N}   \\right) $.\n",
    "\n",
    "\n",
    "**Passo 01:** Abra um script no Matlab, salve-o como **handson10_2.m** e escreva o seguinte código:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAjAAAAGkCAIAAACgjIjwAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAA\nB3RJTUUH4QsbETsthY35AgAAACR0RVh0U29mdHdhcmUATUFUTEFCLCBUaGUgTWF0aFdvcmtzLCBJ\nbmMuPFjdGAAAACJ0RVh0Q3JlYXRpb24gVGltZQAyNy1Ob3YtMjAxNyAxNDo1OTo0NVmiHJsAACAA\nSURBVHic7Z17YBTV2fAfApEAFpMoICJlJAhVIyC32ApmY7UgWhSxVVS6u69ahYIURfCr6GZ9fYut\nFspFuWjdXUSuRSteXkCF3aKCgYqKoIEEhqIG5TUbpSQhIeH7Y3Yns7uzs3M5M3PO7PP7azM7mT1z\nO8957u3OnDkDCIIgCGI3OXYPAEEQBEEAUCAhCIIglIACCUEQBKECFEgIgiAIFaBAQhAEQagABRKC\nIAhCBSiQEARBECpAgYQgCIJQAQokBEEQhApQICEIgiBUgAIJQRAEoYIOdg8AQQhTX1/f2tqal5fX\noUPb4/3+++9/+eWXHTt2vPnmm43/BKmjNTU1NTU1JQ0VQbIW1JAQ5zB37twePXp06dLlRz/6UW5u\nbmFh4cSJE4Wv/vKXv9x+++333nsvkR8yeLTGxka/39+7d++OHTsKQx08eHAoFBJ3uO+++7qm0K1b\nN9kd8vPzf/KTn9x6663Lly9vamqS3aeqqkrc/q9//UvcPnPmTH2ngCBmgOsyxCHMnTv3D3/4AwC0\nb9++c+fOTU1N0Wj01VdfFb4tKSkBgB/96EdEfsvI0err66+77roPPvhAGGpeXt7Jkyc/+eQTj8fz\nr3/9a+HChQDQ2Nh44sSJpH+UCpukHb7//vvKysoNGzYsXLhw8+bNvXr1Stpn6dKlzzzzjPB58eLF\n4vbGxkYdp4AgJoECCXEIL730EgBcccUV7733XufOnQFg//79GzZsEL69/vrrhw4d2rFjR+HPTz/9\n9Ntvv+3YseOoUaM+/vjjysrKgoKCX/ziF+LRWltbd+zYcfz48YaGhg4dOnAcN3z4cPHbpKMBwIED\nBz755JPTp0936tSpV69eQ4cOzcmRNz888cQTgjQaP378ihUrzj777EOHDo0ZM+bgwYOLFi0aO3bs\nmDFjxJ2feuqpoUOHCp/bt2+ferSnnnrqiiuuiEajf/3rX3fu3Llv377Ro0d/+umnSb++dOnSJ598\nMi8v7/jx4y+//LL6q4oglnIGQRzBOeecAwBXXnllQ0ND6rfjx48HgPPOOy/pz8mTJ4vvwujRo8X9\nf/Ob3yS9KVdcccWxY8dkjzZ9+vSkne+44w7ZQba0tAh6VceOHU+cOCFu/+c//yn840033ST99bff\nflv2OLI7XHnllcLGV199VbrPNddcAwDPPvvsmTNnysvLhV8Rvvrd736n9voiiPmgDwlxCDfccAMA\n7Ny5s2vXrj//+c8ffPDBbdu2Kf/L//3f/23YsMHj8Vx88cUAsHnz5nfeeUf4qkePHjNmzFi1atW6\ndesef/zx3NzcPXv2PP7446kHOXTo0IIFCwDgoYceWrdu3YoVK37zm98I0jGVL774QjCXjR079uyz\nzxa3jxo1StC3tm7dKt3/scceuzHO//zP/yifzsMPPyx8ePPNN6XbH3roIQBYunRpa2vrCy+8AACp\nEhRBaABNdohDeOaZZyorK//1r381Nzdv3bp169at8+fPHzFixKZNmwoKCtL917Zt2y699NIdO3b8\n7Gc/A4Avvvji2muvBYA///nPra2t+/fv//LLL0tKSoYOHbpz58433ngj9QjHjx8XPvTr12/kyJE9\ne/acNGlSup/797//LXyQmvsEzjrrrFOnTiU5dXbu3CndQfkK5OXlCR/+85//SLePHTu2b9++e/fu\nve+++7788ssRI0ZIzY8IQg+oISEOoWfPnrt3737vvfeeeOKJG264ITc3FwAqKirmzZuX7l9+9KMf\nXXrppQBw+eWXC1u++OIL4cPSpUvz8/Mvv/zy66+//oYbbhAEQ2qgAQAMHz58wIABADB58uQLLrgg\nLy9vzJgx27dvl/3F888/X/hw6tSppK+EmAVRqAjMmTNnTRxB0VFAFGZS3UtAsEwK6tGUKVOUj4Mg\ndoEaEuIorrrqqquuugoAqqqqBEOcNOI5iVQ1RWD//v3CDO5yuaZMmZKbm/unP/1JqqxIycnJ2bFj\nx9/+9rcPPvjgiy+++Pzzzzdv3vzee+/V1tam6jQDBw7Mzc1tbm7esmVLU1OTuMOHH34oiKiRI0dK\n9y8tLRU0NjU8++yzwgfBaSTl/vvvf/zxxxsaGs4///xJkybV19erPCaCWAlqSIhDePTRR9euXXv6\n9GnhT9FsldHSlYqoJ82YMeNXv/rVmDFjjh07lm7n1tbW3NzcmTNnvvLKK/v371+zZg0AnDx58v33\n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\nVcQDz7jCvEAlllVEkATYE0gNDQ2nT5/m4m7SnJyczp07nzhxwtZBIYg64oFnrqICj1joGgPPEAQA\nANqdOXPG7jFoo76+/oorrtizZ0/nzp2FLVdeeeWjjz76y1/+UrrbpEmTKioq7BgggiAIpYwYMeKl\nl16yexRpYc+HlJubCwD79+8fNmyYsKWxsbFTp05Ju9F80ZGsJt6dHQCA52PeI3T1IwijAumCCy6o\nqakR/jx+/HhDQ0O/fv3sHRWCqEVaVpHjsKwigoiwZ7IDgIULF7777rvr1q3r2LHjk08++dlnn61Z\ns8buQSEIgiCGYE9DAoDJkycfOHBgxIgRZ5999jnnnLNs2bLM/4MgCILQDZMaEoIgCOI82Av7RhAE\nQRwJCiQEQRCECpj0IWXk4MGDL7/8ckNDw3XXXXfttdfaPRz9tLa2fvTRR1999dXp06cnTJgg/Yr1\nczx48ODbb799+PDhLl26jBs3bsiQIdKv2D21Tz75ZOvWrV9//XWHDh1KS0vHjBkjfsX0eYl89NFH\nhw4dKi0t7datm7CF9fPavXs3z/Pin8OHD+/Tp4/wmfVTa2lpWbdu3ccff5ybm3vNNddcc801wnZq\nz6t9eXm53WMgTGVl5a9+9SuXy9W3b9+nn366Q4cOgwYNsntQOnnsscf++te/fvXVV+vXr58yZYq4\n3QHnOGbMmPz8/JKSkmg0+sQTT1xwwQWXXHIJsH9qq1evjkajQ4cObWlpWbJkSU1NzdVXXw3sn5fA\n8ePH77///ldfffXnP//5BRdcAI44r+eee27jxo2tra1ff/31119/3bdv3549ewL7p9bc3HzXXXft\n37//6quv7tKly/bt26+//nqg/LzOOI7f/va3Tz31lPA5HA4PGjTo9OnT9g5JN01NTWfOnAmHw8XF\nxdLtDjjH77//Xvy8aNGi6667TvjsgFMTef311y+99FLhszPO67e//e0//vGP/v3779q1S9zC+nk9\n+uijjz76aOp21k/t2WefHT9+fEtLS9J2ms/LgT4kJ5VeFcpSpOKAc+zatav4uVu3bs3NzcJnB5ya\nyMmTJ7t37y58dsB5vf766wAwduxY6UYHnBcAnDp1avv27fv27ZNuZP3UXnnllUmTJh0/fnz79u11\ndXXidprPy2k+pGwoveqwc2xubn7ppZcED5kzTm3v3r1r1649ceLE0aNH582bB444r9ra2vnz569e\nvVq60QHnJfD2229/9dVX+/bt69Gjx/LlyzmOY/3UWlpajh49umXLlr/+9a99+/atqKh48MEH7777\nbsrPy2ka0pkzZwBAdLcCQIcOHVpaWuwbEXkcdo4PPfTQueeeK3S3csap5efnDx48uHv37t98882n\nn34Kjjgvv99/zz339OjRQ7rRAecFANOnT//4449XrVq1e/fu/v37T506Fdg/tdbWVgA4duzYO++8\nEwgEQqHQn//850OHDlF+Xk4TSGLpVXGLbOlVpnHSOc6cOfPbb79dsmSJ0F/RGafWu3fvW2+99dFH\nH126dOkf//jH48ePs35eFRUVu3fv7tWrVyQS2b59OwDs2bOnqqqK9fMSEGfn3NzcyZMnHzx4sKGh\ngfVTa9++ffv27SdMmCCcyLBhw7p27bpv3z7Kz8tpJrtsKL3qmHOcPXt2dXV1KBQSO4k45tQEhJEf\nPnx4xIgRTJ9XTk5OcXHxqlWrIL70fvfdd7t06dKvXz+mzyuVpqYmAOjQoQPrj2JOTk5RUZFU9RF0\nI8rPy2kaEgCMHz/+hRdeOHXqFAAsW7bsiiuuEA2mzNHa2trc3Cw8Vc3NzaLn3wHnOGfOnL179y5f\nvrxTp05OOjXRP9zS0vL000+fd955Qp8Ups9r2LBhy+I899xzADBz5sw77rgDGD8vAfGW1dXVLV68\neODAgYIawfqp3XLLLevXr6+vrweAbdu21dfXDx48GOg+L6dpSOCs0qubNm2aMWOG8Lm4uBgAPvvs\nM8GwwPo5rl+/HgBGjhwp/HnWWWft3bsX2L995eXlNTU1eXl59fX1F1100dKlS3NycoD980qHA87r\n4Ycf/uGHH/Ly8k6ePDlkyJDFixcL21k/Na/Xe+DAgZ/+9Kf5+fknTpx45plnevfuDXSfl2OLq/7w\nww/ff/+9cAOcioPPkelTa25uPnDgQL9+/Tp27Jj0FdPnpQDr59Xc3PzZZ58VFxenJlo44NR4ni8q\nKhIWRiJ0npdjBRKCIAjCFg70ISEIgiAsggIJQRAEoQIUSAiCIAgVoEBCEARBqAAFEoIgCEIFKJAQ\nBEEQKkCBhCAIglCBAys1IIhxpC3Vk1i6dOmIESOsHAyCZAmYGIsgMrzzzjvCh5MnT86aNevee+8V\n6oABwJAhQwoLC+0bGoI4FtSQEESGa6+9VvggtNocPHiwuEXk888/r66uzsvLGzZsWH5+vrCxqqqq\npaVlwIAB27dvP3HixKWXXipUrqyqqjpw4MC5555bUlIiHkHY+eKLL45EIg0NDeLOUioqKr799tvO\nnTuXlpYKTToQxKmgQEIQzZw6der3v//9P//5zyuvvLK2tvbIkSPz588vLS0FgOeff76uru77779v\nampqamo6dOjQkiVL9u7du2HDhh//+Me7du269dZbn3jiCeE4zz//fG1t7YkTJ86cOdOuXbs9e/bM\nmjXr7rvvFr6tra295557Dh06VFJSsn///g4dOjz//PP0dApAEPKcQRAkPdFotH///m+//bZ04x//\n+Mfrrrvu22+/Ff587rnnhg4devLkyTNnzsyaNat///7vvvuu8NWMGTNGjhz5yCOPCH/+4x//6N+/\n/9dffy38Key8atUq4c+///3v/fv3P3DggPity+X67rvvzpw509jYOHHixOuvv97cs0UQW8EoOwTR\nRmtr66pVq+6++26x0+h9991XX18vttX5yU9+cs011wifr7322m+//faBBx4Q/rzxxhsB4PPPPxeP\n1r1794kTJwqfJ0yYcMEFF7zyyivCr7z++usej0fwV3Xs2HHKlCnV1dX79u2z4iQRxA7QZIcg2qir\nq2tqalqzZs2mTZvEje3atTt58qTwWVrS/6yzzgKAnj17Cn8KTiCh6arA5ZdfLj34JZdc8s033wDA\nd99919LSInUpDR06FABqamouu+wywqeEIHSAAglB9HDdddeJcXcAcO+991588cU6jnMmJcxV6Fsj\n9FKSii6hqW5SVxsEcRIokBBEG4WFhQUFBa2trT/72c+MH+3DDz9sbW0VxExra+uuXbvcbjcAnH32\n2V26dPn888/LysqEPd977z0AKCoqMv6jCEInuNpCEM1Mnjx52bJlb7zxhqDB/PDDD2vXrj116pSO\nQ7W0tJSXl7e2tra2tj755JPNzc233HILAOTk5Nxxxx0vvvjinj17AODo0aPz5s0bOXJknz59yJ4L\ngtADakgIohm323369Ok5c+bMnj07Nze3oaFh4MCBN998s45DjRo1qrm5edCgQQDQsWPH+fPnX3DB\nBcJXM2bMqK2tvfPOO88666yGhoaRI0c+/fTTJE8DQSgDKzUgiE5aW1sPHTp04sSJ4uLi3NxcHUeY\nPXv2yZMnFy9eXFtby/P84MGDU11Ezc3Ne/bs6d+/v5h7iyBOBTUkBNFJTk4OqTTVwsLCdOWIcnNz\nsXQekiWgDwlBEAShAjTZIYhtCHEQQoQ3giAokBAEQRAqQJMdgiAIQgUokBAEQRAqQIGEIAiCUMH/\nB9DnQg2OwCdnAAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<IPython.core.display.Image object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "clear all; close all;clc;\n",
    "% Parâmetros\n",
    "n_bits = 100;            % Número de bits\n",
    "T = 50;                  % Tempo de símbolo\n",
    "Ts = 2;                  % Tempo de símbolo em portadora única\n",
    "K = T/Ts;                % Número de subportadoras independentes\n",
    "N = 2*K;                 % N pontos da IDFT\n",
    "%\n",
    "% Gerar bits aleatórios\n",
    "dataIn=rand(1,n_bits);   % Sequência de números entre 0 e 1 uniformemente distribuídos\n",
    "dataIn=sign(dataIn-.5);  % Sequência de -1 e 1\n",
    "% Conversor serial paralelo\n",
    "dataInMatrix = reshape(dataIn,n_bits/4,4);\n",
    "%\n",
    "% Gerar constelaçao 16-QAM\n",
    "seq16qam = 2*dataInMatrix(:,1)+dataInMatrix(:,2)+1i*(2*dataInMatrix(:,3)+dataInMatrix(:,4)); \n",
    "seq16=seq16qam';\n",
    "% Garantir propriedadade da simetria\n",
    "X = [seq16 conj(seq16(end:-1:1))]; \n",
    "%\n",
    "% Construindo xn\n",
    "xn = zeros(1,N);\n",
    "for n=0:N-1\n",
    "    for k=0:N-1\n",
    "        xn(n+1) = xn(n+1) + 1/sqrt(N)*X(k+1)*exp(1i*2*pi*n*k/N);\n",
    "    end\n",
    "end\n",
    "%\n",
    "% Construindo xt\n",
    "xt=zeros(1, T+1);\n",
    "for t=0:T\n",
    "    for k=0:N-1\n",
    "        xt(1,t+1)=xt(1,t+1)+1/sqrt(N)*X(k+1)*exp(1i*2*pi*k*t/T); \n",
    "    end \n",
    "end \n",
    "%\n",
    "% Plots\n",
    "plot(abs(xt));\n",
    "hold on\n",
    "stem(abs(xn), 'r')\n",
    "hold off\n",
    "title('Sinais OFDM')\n",
    "legend('x(t)','x_n')\n",
    "xlabel('Tempo')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Comentários sobre o código\n",
    "\n",
    "- Inicialmente, vamos declarar as principais variáveis do código: O número de bits  $ n_{bits} = 100$; O tempo de símbolo OFDM $T = 100$ segundos; E o tempo de símbolo modulado $T_{S} = 2$ segundos. Com isso, podemos calcular: o número de subportadoras ($K$), dada pela relação entre $T$ e $T_{S}$; e do número de pontos da IDFT ($N=2K$). Temos, então, $25$ subportadoras e $50$ pontos de DFT.\n",
    ">```python\n",
    "% Parâmetros\n",
    "n_bits = 100;            % Número de bits\n",
    "T = 50;                  % Tempo de símbolo\n",
    "Ts = 2;                  % Tempo de símbolo em portadora única\n",
    "K = T/Ts;                % Número de subportadoras independentes\n",
    "N = 2*K;                 % N pontos da IDFT\n",
    "...\n",
    "```\n",
    "\n",
    "- Em seguida, iremos gerar os $100$ bits pseudoaleatórios utilizando a função $rand()$. Essa função gera números entre $0$ e $1$ a partir de uma distribuição uniforme, de modo que há igual probabilidade de gerar números maiores que $0,5$ e menores que $0,5$. Subtraindo esse sinal de $0,5$, obteremos, então, valores uniformemente distribuídos entre $-0,5$ e $ 0,5$ . A função $sign()$ substituirá os valores negativos por $-1$ e valores positivos por $1$. Por fim, organizaremos essa sequência, que antes estava em um vetor de uma linha e $n_bits$ colunas, em uma matriz de quatro colunas e $n_bits$/4 linhas utilizando a função $reshape()$. Dessa forma, o vetor $dataIn$ que tem tamanho 1x100 gerará a matriz $dataInMatrix$ de tamanho 25x4, realizando uma conversão serial para paralelo.\n",
    ">```python\n",
    "...\n",
    "% Gerar bits aleatórios\n",
    "dataIn=rand(1,n_bits);   % Sequência de números entre 0 e 1 uniformemente distribuídos\n",
    "dataIn=sign(dataIn-.5);  % Sequência de -1 e 1\n",
    "% Conversor serial paralelo\n",
    "dataInMatrix = reshape(dataIn,n_bits/4,4);   \n",
    "...\n",
    "```\n",
    "- Com os bits devidamente organizados, podemos então gerar a constelação 16-QAM. Faremos isso de modo que os dois primeiros bits representem a parte real da constelação e os dois últimos a parte imaginária, ou seja, respeitando a constelação mostrada anteriormente e a Tabela 1. Obteremos assim a variável $seq16qam$. Para calcular $X_{k}^{′}$ e obtê-lo como um vetor de uma linha e $N$ colunas, calculamos a transposta de $seq16qam$ e, para manter a propriedade da simetria da DFT, concatenamos $seq16$ com seu conjugado na ordem inversa. Assim, geramos o vetor $X$.\n",
    ">```python\n",
    "...\n",
    "seq16qam = 2*dataInMatrix(:,1)+dataInMatrix(:,2)+1i*(2*dataInMatrix(:,3)+dataInMatrix(:,4)); \n",
    "seq16=seq16qam';\n",
    "% Garantir propriedadade da simetria\n",
    "X = [seq16 conj(seq16(end:-1:1))]; \n",
    "...\n",
    "```\n",
    "\n",
    "- Os valores de $X$ serão usados para calcular o sinal analógico a ser transmitido, $x(t)$, e a sua versão amostrada, $x_{n}$ . Perceba que o tamanho do vetor $X$ é o dobro do tamanho de $seq16$ e que os tamanhos de $seq16$ e de $X$ são iguais a $K$ e $N$, respectivamente. Já mostramos que para montar a IDFT com $X_{k}^{'}$ fazemos:\n",
    "$$x_{n}= \\frac{1}{\\sqrt{N}}    \\sum_{k=0}^{N-1}X_{k}^{'} e^{j2\\pi n \\frac{k}{N} }$$\n",
    "Dessa forma, podemos gerar o sinal discreto $x_{n}$:\n",
    "\n",
    ">```python\n",
    "% Construindo xk\n",
    "xn = zeros(1,N);\n",
    "for n=0:N-1\n",
    "    for k=0:N-1\n",
    "        xn(n+1) = xn(n+1) + 1/sqrt(N)*X(k+1)*exp(1i*2*pi*n*k/N);\n",
    "    end\n",
    "end \n",
    "```\n",
    "\n",
    "- Como mostrado na parte teórica do experimento, o sinal x(t) a ser enviado é analógico e contínuo, obtido a partir da seguinte equação:\n",
    "$$x(t) \n",
    "= \\frac{1}{\\sqrt{N}}    \\sum_{k=0}^{N-1}X_{k}^{'} e^{j2\\pi n \\frac{kt}{T} },$$\n",
    "com $ 0\\leq t \\leq T$, sendo $T$ a duração $/$ intervalo do sinal, construímos $x(t)$.\n",
    "Dessa forma, podemos gerar o sinal discreto $x(t)$:\n",
    ">```python\n",
    "% Construindo xt\n",
    "xt=zeros(1, T+1);\n",
    "for t=0:T\n",
    "    for k=0:N-1\n",
    "        xt(1,t+1)=xt(1,t+1)+1/sqrt(N)*X(k+1)*exp(1i*2*pi*k*t/T); \n",
    "    end \n",
    "end \n",
    "```\n",
    "\n",
    "- A parte final do código é dedicada a mostrar os sinais no tempo. Como os sinais gerados são complexos, mostramos a magnitude (envoltória) utilizando a função $abs()$. Tanto $x_n$ como $x(t)$ são mostrados.\n",
    ">```python\n",
    "% Plots\n",
    "plot(abs(xt));\n",
    "hold on\n",
    "stem(abs(xn), 'r')\n",
    "hold off\n",
    "title('Sinais OFDM')\n",
    "legend('x(t)','x_n')\n",
    "xlabel('Tempo')\n",
    "```\n",
    "\n",
    "- Observando o sinal OFDM gerado, podemos notar um grande problema do OFDM: o alto **Peak-to-Average-Power-Ratio** (PAPR), ou , a alta razão entre o valor de potência máximo e a sua média. Sinais com alto PAPR podem saturar os amplificadores de potência do transmissor, causando distorção de intermodulação no sinal transmitido. No caso dos sistemas LTE, esse é um dos motivos pelos quais o OFDM não é utilizado no uplink, pois o alto PAPR encarece os amplificadores e obriga que eles possuam baixa eficiência de energia, por não poderem apresentar alto ganho, procura-se reduzir a complexidade do equipamento móvel. Como no downlink, a transmissão está na estação base, isso não é um problema.\n",
    "\n",
    "- Como podemos observar, o sinal $x_{n}$ representa bem o sinal $x(t)$, e podemos afirmar que $x_{n} = x\\left (\\frac{nT}{N} \\right )$."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Prática 3: Recepção OFDM\n",
    "\n",
    "Um esquema simplificado de um receptor OFDM é mostrado na figura a seguir.\n",
    "\n",
    "![Figura06](./FIGS/HD_01/Figura_6.png)\n",
    "\n",
    "O primeiro bloco, mostrado como um conversor A $\\rightarrow $D (analógico-digital) é simplesmente a amostragem do sinal $x(t) $ que chega ao receptor, obtemos com isso o sinal amostrado $x_{n}$. O segundo bloco é a transformada discreta de Fourier (DFT), que faremos com $x_{n}$ para obtermos $X_{k}$, ou seja, os símbolos representados por pontos na constelação 16-QAM. A DFT é dada por:\n",
    "\n",
    "$$ X_{k} = \\sum_{j=1}^{N} x(j) \\cdot  \\omega_{N}^{(j-1)(K-1)},$$\n",
    "\n",
    "sendo $k=0, 1, ..., N-1$.\n",
    "\n",
    "Entretanto, como veremos nesse experimento, os pontos $X_{k}$ obtidos pela DFT podem não ser exatamente aqueles valores pré-determinados na Tabela 1, por exemplo, se a comunicação estiver sujeita a ruído e outras manifestações do canal rádio móvel. Será, então, realizada uma decisão sobre qual é o símbolo que $X_{k}$ o sinal demodulado representa. Faremos isso a partir da proximidade de $X_{ k}$ com a constelação 16-QAM.\n",
    "\n",
    "Por exemplo, caso $X_{1}= 1,5 + j1,5$, ele será interpretado por 1 + j1, que é o valor da constelação 16-QAM mais próximo. Isso é ilsutrado na figura a seguir, que mostra a constelação 16-QAM sendo representada por pontos azuis e o valor suposto de $X_{1}$ representado por uma cruz vermelha. Por fim, consultando a Tabela 1, concluímos que $X_{1}$ representa a sequência de bits $1010$. \n",
    "\n",
    "![Figura07](./FIGS/HD_01/Constelacao16QAM.png)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Descrição do experimento\n",
    "Considere o mesmo sinal gerado na **Prática 2**, mas supondo que o sinal enviado foi corrompido por um ruído aditivo gaussiano branco (AWGN) de média zero e variância $\\sigma^2 = 2$ (pode ser um parâmetro a ser escolhido pelo usuário). O sinal recebido amostrado $r_{n}$ será, então:\n",
    "$$r_{n} = x_{n} + ruido$$\n",
    "Calcule os valores de $r_{n}$ e sua DFT $Y_{k}$. Mostre graficamente a constelação de $Y_{k}$ e os valores da constelação 16-QAM para cada valor de $k$. Então estime os valores dos símbolos recebidos $Z_{k}$ e contabilize quantos símbolos foram recebidos erroneamente. Utilize $\\sigma =\\left \\{ 2, 0.5, 1 \\right \\}$.\n",
    "\n",
    "\n",
    "**Passo 01:** Abra um script no Matlab, salve-o como **handson10_3.m** e escreva o seguinte código:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Para variância de 0 houve 0 símbolos errados.\n",
      "Para variância de 0.1 houve 1 símbolos errados.\n",
      "Para variância de 1 houve 109 símbolos errados.\n"
     ]
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAjAAAAGkCAIAAACgjIjwAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAA\nB3RJTUUH4QsbEhQDSQFy+QAAACR0RVh0U29mdHdhcmUATUFUTEFCLCBUaGUgTWF0aFdvcmtzLCBJ\nbmMuPFjdGAAAACJ0RVh0Q3JlYXRpb24gVGltZQAyNy1Ob3YtMjAxNyAxNToyMDowM73y5IQAACAA\nSURBVHic7d1/XFRlvgfw7wyOiqj5gxG1jMG1nXZjLRSVLbsMXTNy28qse1tTGTbbGwW57PpjX60r\njOvm7dVevV24qdXGUGlZ262u/SC94ZBKZYgZoaIlQyRauGgYEgwM94/ndJxgGM7MnJnznHM+7xd/\nzM8zz5wznO95nuf7PI+hp6eHAAAAlGZUugAAAABECEgAAMAJBCQAAOACAhIAAHABAQkAALiAgAQA\nAFxAQAIAAC4gIAEAABcQkAAAgAsISAAAwAUEJAAA4MIgpQsA0XbhwgWv1zt06NBBg35w9Pft2/fl\nl18OGTLk9ttvD/9T5N2asgJ/l87OzldffZWIZsyYMXny5PA/TvYNhilqh1JLvxkIUQ/oxiOPPDJu\n3Djx0I8ePfruu+8Wn50/fz4RxcfHy/JZ8m5NWYG/y5kzZ9j+fPrpp2X5ONk3GKaoHcpwPuiLL754\n8MEHbTbbiBEjRowYMXHiRNmLB1GAGpJerF+//uGHHyaimJiYYcOGdXZ2nj17ll2JM7NmzSKiESNG\nKFZEXul8z0Tt64fzQQcOHPjv//5vuUsE0YaApBfPPfccEaWkpOzdu3fYsGFEdPjw4VdeeUV8wc03\n3zx9+vQhQ4awu5988snXX389ZMiQ66+//uOPP66rqxs9evTcuXPF13u93vfff7+5ubm9vX3QoEEW\ni2XGjBlBFamxsfHAgQMdHR1Dhgy54YYbRo4cKT51+PDh2trarq6u8ePHp6enG41CZ+fHH3985swZ\nVirWwnP11VdfeeWV7KkjR46MHz8+IyOjv0/0/VIHDhw4duzYP/3TP1166aUHDhw4e/bs6NGjp0+f\nTkRnz549cOAAEV111VUTJkzotWeI6LvvvisrK+vo6EhLSxs+fLjfz+rvK/g14AaPHj1aU1PT1dV1\n+eWXX3fddf1tx3f/sEe8Xm95eTkRWSyWKVOmBD5qfvdPr68vfQt+fzaM30Mf1Af1kpyc/NJLL82c\nOfPBBx988803A+xq4JrSVTSIkksuuYSI0tLS2tvb/b6gV4OJeDcnJ0f8tdx0003i65csWdLrt5SS\nknL69Gm/W+vlm2++WbBgge97x40bx546c+bMTTfd5PvU5Zdf/t5777Fnf/GLX7DNLly4UHzBM888\nk5+fL9697bbb+tsJYqny8vLYi1999dWenp45c+YQ0Zw5c9jLdu3axZ599tln+34Xt9t92WWXsReY\nTKaNGzey22ILW+Cv0FfgDba0tLBvLbr66qu/+OILv5tat24dEcXExIgHQqwE79q1S/pR890/vb6+\nxC3097MJcOiD+qD+sH01YsSIwC8DPiHLTi/YP+oHH3wwcuTIf/7nf/7d7363e/fuAd915syZV155\nxW63X3HFFUT0zjvv/N///R97KiEhIT8/f9u2bS+99NKaNWtMJtPBgwfXrFkjpTCLFi1ilbPZs2c/\n/vjjeXl5ZrOZPXXPPfe88847RPSb3/xm7dq148aN++KLL2677bavvvrKt1SVlZV2u3306NFElJOT\ns3nz5kWLFl111VVE9Prrr7///vuBv1RRUZHNZrvhhhsCV1z8uvvuu7/88ksiWrhw4f3339/3K0v5\nCtI3uHjx4jfffDMuLu6xxx579tlnL7/88kOHDt18881+N/XrX/86Jiamu7v7hRdeYI88++yzRGSx\nWFjQlXLUAu8fiVvo72cT4NCH8EGgNUpHRIiSpqYm1h7la+bMmS0tLewFfmtIRFRbW9vT01NZWcnu\nFhUVidvs7u6uqal5++2333zzzbS0NCISO5MD1JCOHDnCNuV74dzR0eH71JIlS9jjL774Invk3//9\n33u+v/4los8//7ynp0esGLFSsTBARM8//7zfnSB+qZdeesn3cXay/sUvfsHuBqghHT9+nD21aNEi\n9uItW7awR1iFZsCv0EvgDYpbe+SRR9izYitreXm53+/4y1/+koimT5/e09PzzTffmEwmIlq3bp34\nggGPWq/90/dQStmC359NgEMf7Af1BzUkVUMfkl5MmDChqqpq37595eXlH3744c6dOz0ez/79+zds\n2PDnP/+5v3eNGDHipz/9KRH97Gc/Y48cPXqU3di8efPKlSvPnz/v+/ped/06fPgwu7F48WLxwcGD\nB/s+lZmZyW7cdttt7Mann34qvnj06NEsH5pViYiIxdrY2Fh21+v1BihAXFzcXXfdNWA5Axde7Bdh\n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\nsuwA/Pjxj38sxoPbb7+9q6vr4MGD/b24u7t71apVq1ateuihh5YvX37NNdfcdNNNgbczceLEmJgY\nj8dz/PjxY8eOJSYm1tbW+m7zzJkz4m2z2ez1erdt23bvvfeKC5j+27/924ULF8TVegA0ADUkAD8S\nExPF26yrprOzs7a2dtOmTezB6dOnZ2dn93rXmDFj/vrXv2ZmZhqNxgDbIaIjR448/PDDdXV1cXFx\nMTExbW1tqamp7GUmk2nZsmV/+ctfNm/enJaWdv311992223nzp3r7Ox88cUXWQ2MMRgMoSViAPAJ\nAQlAqjFjxthsNnbbd32jmJiYRx99NKhN5eXlzZgx4+9//ztrtSssLGxoaBCffeCBBxYsWPDRRx/t\n2bNnzZo1u3btWrduHRHdeOON11xzjfiy++67j+WXA2gDAhKAVBMmTLjzzjvD347H42lsbPzTn/4k\ndkr5RiMmISHhlltuueWWW9LS0v7whz8UFRWNHj3a6/Vee+214RcAgE/oQwKItpiYmNGjR+/atcvr\n9RLRs88+u3//fvHZEydOvPLKK+3t7UTk9XprampGjx4dExOTk5OzZcuWN954g72rtbV1+/btHR0d\nSn0LANmhhgQQbUajcd26dcuXL3/99deJKC0t7ZZbbvn666/Zs16v97/+678efvjh2NjY7u7u+Pj4\nxx9/nIiysrK6urpWr169atUqk8nU3t4+derU22+/XclvAiArLGEOoIzu7u4DBw5MmTJlzJgxfZ/t\n6Oj4+OOPJ06c6NtZRURer/fEiRPnz59PTk42mUzRKixANCAgAQAAF9CHBAAAXEBAAgAALiAgAQAA\nFxCQAACACwhIAADABQQkAADgwv8D8jJwU4gCAkwAAAAASUVORK5CYII=\n",
      "text/plain": [
       "<IPython.core.display.Image object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAjAAAAGkCAIAAACgjIjwAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAA\nB3RJTUUH4QsbEhQE12XnWgAAACR0RVh0U29mdHdhcmUATUFUTEFCLCBUaGUgTWF0aFdvcmtzLCBJ\nbmMuPFjdGAAAACJ0RVh0Q3JlYXRpb24gVGltZQAyNy1Ob3YtMjAxNyAxNToyMDowNCOWcScAACAA\nSURBVHic7d17eFN1mgfwNymhlsqdUESxqQMTVxkRqNBF3KYuaKmu2kVnXQSbKuxapbIdueyjDGkY\nZlwf94F1ygqoa1MQFC/D48OoFYY2FayKpYjlVm5JrRS0nYIwUNu0yf7xO5yGNE1zP79zzvfz8PDk\nevqenOS853fXeDweAgAAkJpW6gAAAACIkJAAAIATSEgAAMAFJCQAAOACEhIAAHABCQkAALiAhAQA\nAFxAQgIAAC4gIQEAABeQkAAAgAtISAAAwIV+UgcAsXL58mW3233NNdf063fVUf7888+///77xMTE\nhx56KPK/Et2tSSvwvnR0dGzbto2I7rjjjptuuinyPxf1DUYobocyKn+oo6Ojs7NzwIABUQwMpOcB\nxfnDH/4wcuRI8RAPHTr00UcfFZ/Nzc0lohEjRkTlb0V3a9IKvC8tLS3s83zjjTei8ueivsEIxe1Q\nRviH7Hb7hAkT2EeXnJy8ZMkSl8sV4PXffffdM888YzKZBg4cOHDgwNGjR4f3dyEOUEJSmhdffPH5\n558nooSEhAEDBnR0dJw7d45diTNTp04looEDB0oWIq9U/snEbfcj+UNff/31zJkzXS7X0KFDb7zx\nxgMHDrz88ss//PBDWVlZb2/Zt2/f//7v/4YfLsQREpLSbNq0iYgmTpy4Z88eVqFx+PDhDz74QHzB\nrFmzJk+enJiYyO5+++23P/74Y2Ji4l133fXNN9/U19cPHTr0nnvuEV/vdru/+OKL5ubmtra2fv36\nGQyGO+64I6SQGhsb9+3b197enpiYePfddw8aNEh86vDhw4cOHers7Bw1alRmZqZWKzRqfvPNNy0t\nLSwqVsMzYcKEm2++mT115MiRUaNGZWVl9fYXvXdq3759x44d+4d/+Ifrr79+3759586dGzp06OTJ\nk4no3Llz+/btI6Jbb731uuuu8/lkiOjnn38uLy9vb2/PyMi49tpr/f6t3nbBrz43ePTo0bq6us7O\n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\n19TUjB8/fsuWLUTkdruJaNeuXcnJyWPHjpUyxOjx3llm2bJlJ0+eLCsrGzBggFRRxZROpxs9evSZ\nM2fY3ebm5ra2NsUcUL8Uf0wZrVar7F+rhLD8BHdcLtf48eM3b96cnp4udSyxsnz58tra2rKysiFD\nhrBHvOvxFOOPf/zjrl273n333cTExFWrVh08ePCdd96ROqhYUckx9aGGX2s8oYQEEnjvvfeIaPr0\n6exu//796+rqJI0oJgoKCo4dOzZlypRrr7128ODBGzZskDqiGFLJMYWYQgkJILYuXLjw008/jRkz\nRupAAHiHhAQAAFxALzsAAOACEhIAAHABCQkAALiAhAQAAFxAQgIAAC4gIQEAABeQkABi5cCBA7W1\ntVJHASAbmKkBgIjopZde2rZt25dffhnGG7du3cpua7XaO++8c+HChePGjSOiLVu2XLp0SSWLeQNE\nDgkJgIiovb390qVL4b2xvb391VdfJaILFy6sW7fuX/7lXz755JOUlJRoxwigcEhIAL5OnDjR1dVl\nNBqrq6tbW1vT0tJuvfXWAK/XarWZmZns9q233jpr1qyKiop//dd/FV/gdztnzpw5dOhQR0fH8OHD\np06d2jOGY8eOEVFycvL06dPF1RyOHDly8uTJa665Jj09XZzGFEAZkJAAfL3++uvnz5//+eefL1y4\noNFoDh06tHjx4gULFgTzXrZErNPpZHddLldeXl7P7bz//vtWq3XKlCn9+vWrrq4eN26czWYTVwFf\ns2bN66+/PmnSpOTk5KNHj2ZkZLz00kvt7e3/8R//8dlnn2VkZLS2tjY0NKxZs0ZMhAAKgIQE4Ifd\nbl+zZk1OTg4Rvfrqq//zP//zxBNPBLPoXHl5ORFNmDAh8HamTZv2zTffsA1euHDh0Ucftdlszz77\nLBG5XK7169eL7yKi5uZmIlq9evXJkyftdjtbhXbdunXPPffcZ599puzFh0BV0MsOwI9f/vKXYj54\n6KGHOjs79+/f39uLu7q6li1btmzZsmeffXbx4sW33377vffeG3g7o0ePTkhIcLlcx48fP3bsWGpq\n6qFDh7y32dLSIt7W6/Vut3vLli1PPvmkuCb6v//7v1++fLm6ujp6Ow0gMZSQAPxITU0Vb7Ommo6O\njkOHDq1bt449OHny5Pz8fJ93DRs27L//+7+zs7O1Wm2A7RDRkSNHnn/++fr6+uTk5ISEhEuXLokr\nvOl0ukWLFv3+979fv359RkbGXXfd9eCDD54/f76jo+Odd95hJTBGo9GE1xEDgE9ISADBGjZsmMlk\nYre91zdKSEh46aWXQtpUYWHhHXfc8f7777Nau+Li4oaGBvHZp59+evbs2V9//fXu3btXrFixc+fO\nVatWEdHMmTNvv/128WULFixg/csBlAEJCSBY11133cMPPxz5dlwuV2Nj429/+1uxUco7GzEpKSn3\n33///fffn5GR8Z//+Z8lJSVDhw51u93Tpk2LPAAAPqENCSDeEhIShg4dunPnTrfbTUQbN27cu3ev\n+OypU6c++OCDtrY2InK73XV1dUOHDk1ISCgoKNiwYcOf//xn9q4LFy5s3bq1vb1dqr0AiDqUkADi\nTavVrlq1avHixR9++CERZWRk3H///T/++CN71u12//GPf3z++eeTkpK6urpGjBjxyiuvEFFeXl5n\nZ+fy5cuXLVum0+na2tpuu+22hx56SMo9AYgqLGEOII2urq59+/aNHTt22LBhPZ9tb2//5ptvRo8e\n7d1YRURut/vUqVMXL14cP368TqeLV7AA8YCEBAAAXEAbEgAAcAEJCQAAuICEBAAAXEBCAgAALiAh\nAQAAF5CQAACAC/8P9uE39U+AH/8AAAAASUVORK5CYII=\n",
      "text/plain": [
       "<IPython.core.display.Image object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "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\npuHz+Q4fPlxUVKT9ymeQo1VWVn7//feDBw9u6JdDb+j48eMnT54cPHhw7d+K1eo8cuTIX//61/vv\nv795BxWb4fDhwx6Pp1+/foGsfOrUqb/+9a/33XdfQxeON/Up3HDAo0ePnjp16u677w5ywwW/1YIf\nQRre9EE+0NGjR8+fPz906NB6z9hBcQQSAEAJXNQAAFACgQQAUAKBBABQAoEEAFACF6LcdDNmzNi1\na5fRVQAwzJAhQ7Tvf0HjCKSbbteuXS6Xq5EVnE5n4ysYTvEKFS9PlK+Q8oJ0wwqdTmeLFRPWOGQH\nAFACgQQAUAKBZLy0tDSjS7gBxStUvDxRvkLKC5L6FYYL/lLDTaf+EXAANxUfAgFiDwkAoASusmu+\nffv25eTkFBUVRUREjBw5Uv+GUABAM7CH1Hw5OTllZWVDhw6Ni4tbvHjxkiVLmjmQxRLSusyHBgaJ\nBgaJBoYIe0jNl5mZqU/36dNn3rx5CxYsMLAeAAhr7CGFRkVFRVxcXLPvXusbPtEcNLDZtNbRwGaj\ngSFEIAUlLy9vwYIFGRkZGzduXLZsWTNGePJJEZGePUNcmHmMHv3j/2gGrXXa6xDNoL15X37Z6Dpu\nCQRSUGJiYgYMGBAXF3f+/Pn9+/c3tJrT6XQ6nVlZWT/Osli0f++utoiIXyz6nBYo+1ZwtV3bci0i\nUniCBjbR1XYVnrCIyLZcGthEV9vlF4uIvLu6ngZmZWVp733jqgw3Bn+F+q1i//79d91114ULF65f\ndNdddzVyx23b/H6RRYtuVmG3vHff9ftF3n3X6DrCFg0M0qJFfr/Itm2NrdP4hwB0/GJsaFRVVQ0Y\nMGDdunVDhgyps+jGvxNnsQhbIRg0MEg0MEg3aiC/GBsgDtk1386dO7UJr9e7dOnS2NjYhIQEY0sC\ngPDFZd/Nt2jRorNnz7Zu3bqysrJnz54rV660Wgl4AGgmAqn5tmzZEpqBOFoSJBoYJBoYJBoYIvxE\nDwBQAoEEAFACgQQAUAKBBABQAoEEAFACgQQAUAKBBABQAoEEAFACgQQAUAKBBABQAoEEAFACgQQA\nUAKBBABQAoEEAFACgQQAUAKBBABQAoEEAFACgQQAUAKBBABQAoEEAFACgQQAUAKBBABQAoEEAFAC\ngQQAUAKBBABQAoEEAFACgQQAUAKBBABQAoEEAFACgQQAUAKBBABQAoEEAFACgQQAUAKBBABQAoEE\nAFACgQQAUAKBBABQAoEEAFACgQQAUAKBBABQAoEEAFACgQQAUAKBBABQQoTRBYSxgoKCrVu3FhYW\nRkdHP/zww4MGDTK6IgAIY+whNd+0adMKCwuHDh1qt9tnzJixadMmoysCgDDGHlLzffHFF+3atdOm\n27dvv2LFipSUFGNLAoDwxR5S8+lpJCIOh8PtdhtYDACEOwIpBNxu97p166ZMmdLQCk6n0+l0ZmVl\ntWRVAIyVlZWlvfeNLiRsWPx+v9E1hL3Zs2dfunTpnXfesdls1y91Op0ul6vlqwKgCD4EAsQ5pGDN\nmTPnwoULDaURACBABFJQ5s2bd+zYsTVr1rRp08boWgAgvBFIzbdgwYK8vLw1a9ZERUVpVzTY7Xaj\niwKAcEUgNd+HH34oIsOHD9duRkZG5uXlGVoRAIQxAqn5OEsJACHEZd8AACUQSAAAJRBIAAAlEEgA\nACUQSAAAJRBIAAAlEEgAACUQSAAAJRBIAAAlEEgAACUQSAAAJRBIAAAlEEgAACUQSAAAJRBIAAAl\nEEgAACUQSAAAJRBIAAAlEEgAACUQSAAAJRBIAAAlEEgAACUQSAAAJRBIAAAlEEgAACUQSAAAJRBI\nAAAlEEgAACUQSAAAJRBIAAAlEEgAACUQSAAAJRBIAAAlEEgAACUQSAAAJRBIAAAlEEgAACUQSAAA\nJRBIAAAlEEgAACUQSAAAJRBIAAAlRBhdQBjz+Xx79+49c+aMx+OZMmWK0eUAQHgjkJpv4cKF2dnZ\nP/nJT/Lz84MKJItF/P7Q1WU+NDBINDBINDBEOGTXfC+99NLu3btnzZpldCEAcCsgkJrPbrcHP8iJ\nEyIiubnBj2RSNDBIWutoYLPRwBAikAz28ssiIqNHG11H2HryyR//RzNordNeh2gG7c27Zo3RddwS\nCKSW4HQ6nU5nVlbWj7MsFu3fu6stIuIXiz7HsCrDy9V2bcu1iEjhCRrYRFfbVXjCIiLbcmlgE11t\nl18sIvLu6noamJWVpb33jasyzBBILcHlcrlcrvT09B9n+f3av9xtfhFZ/a5fn2NYleHlartWv+sX\nkdxtNLCJaGCQrm3gicJ6Gpienq69942rMsxY/Lz+gvPll1+mpaXl5eU1tILT6bzBK5JLdIJEA4NE\nA4N0owbe+EMAIsJl38Hw+Xxer9fr9YqI2+2WEF3mAADmRCA1X3Z2dmZmpjbdr18/ETlw4ACZBADN\nQyA1X3JycnJycggG4mhJkGhgkGhgkGhgiHBRAwBACQQSAEAJBBIAQAkEEgBACQQSAEAJBJIcPXp0\n37592nRlZWVlZaWx9QCAOZk6kHJycpxO50MPPfTzn/+8uLhYRL744osJEyYYXRcAmJF5A8nr9aam\npr744osulys2NlabOWbMmHPnzml/dgEA0JLMG0jHjx+Pi4ubPn167ZlRUVGRkZHl5eVGVQUApmXe\nQPL5fPX+mR+v12u1mrctAGAU837ydurU6cyZM3WOzuXk5FgslpiYGKOqAgDTMm8gxcbGDhs2LCEh\n4dNPPxWR06dPL1myJDU19Ze//KXRpQGAGZn9+5AWLFiwadMmj8cjIlFRURkZGU+G+tuw+SoUwOT4\nEAiQqQOptLS0Y8eOIvK3v/1NRNq2bXszHoXXImByfAgEyLyH7A4ePDhx4kRtum3btjcpjQAAATJv\nIJFAAKAU8wZSjx49HA6HdkUDAMBw5v3G2OLi4oqKiszMzMWLF9feW7JarVu2bDGwMAAwJ/MGkohE\nR0fffffddWbyW7EAYAjzBpLD4fj444+NrgIA8HfmDSQRuXz5cr3z27Vr18KVAADMG0jFxcXDhw+/\nfr7NZsvPz2/5egDA5MwbSA6HY/v27fpNn8938uTJGTNmrF+/3sCqAMC0zBtIIuJwOGrf7Ny5844d\nO8aNG7d3716jSgIA0+KKsmvExsa63e6LFy8aXQgAmA6BdI3jx4/X1NRERJh6xxEADGHeT97i4uJn\nnnmm9pzq6urCwsKBAwfyV4UAoOWZN5BEpLq6uvZNq9W6fPny5ORko+oBADMzbyA5HI7s7GyjqwAA\n/J15zyEVFxdf/+Wwly9ffvzxxw2pBwBMzryBJCLffffd9TO///77lq8EAGDqQLpeTU2NxWIxugoA\nMCMznkOaO3funj17RKSkpOTBBx+svejcuXP33XefQXUBgKmZMZBiYmJiYmJE5MyZM9qExmazZWRk\nTJo0ybjSAMC8zBhIL7zwgogUFxe/9NJLb7zxhtHlAABEzHwOyeFwkEYAoA4z7iHV9sorr2RnZ3s8\nHn2O1Wr9+uuvDSwJAMzJvHtIIjJy5Mg//vGP3bp1Kykp6dGjR1RUVElJSa9evYyuCwDMyLx7SEVF\nRefOnXO5XKWlpcnJyRs2bBCR9957b/PmzUaXBgBmZN49pLKysjvuuENErFarfshu+vTpBw4cqKys\nNLQ0ADAj8wZSZGSkNtGqVavy8nKfz6fd9Hg8BBIAtDzzBlLnzp3PnDkjIlFRUZ06dVq8eHFRUdGi\nRYtEJDY21uDiAMB8zHsOqV27duvXr9emN27cmJKS8v7770dGRr755puBD1JQULB+/fqqqqqxY8eO\nGTPm5lQKAKZg3kASEf2Cum7duu3evbu6urpVq1aB393lcv385z9/7rnnOnbs+PLLLxcVFc2cOfPm\nVAoAtz7zBtLBgwefffbZnTt36nOalEYismzZsmnTpqWmpopIly5dMjIyHnvsMZvNFuJCAcAczHsO\nKfjvKd++fXtiYqI2PWLEiJqamtrxBgBoEvMGUo8ePRwOx6efftq8u1dVVXk8nvj4eO2m1Wpt06ZN\neXl5yOoDAJMx7yG74uLiioqKzMzMxYsX195bslqtW7ZsueHd/X6/iDgcDn1ORESE1+utd2Wn0yki\naWlp6enpwdYNIExkZWW9/vrrRlcRTswbSCISHR19991315lptQa012i320UkPz8/ISFBm3PlypWo\nqKh6V3a5XEGUCSAspaenaz+Daj+S4obMG0gOh+Pjjz9u9t3tdnvXrl3Pnj2r3SwuLq6qqurdu3eI\nqgMA0zHvOaTgpaSkvP3229XV1SKyatWqgQMH6qeUAABNZcY9pNLS0sZX6NixYyDjpKamHjlyZMiQ\nIW3btm3fvv2qVatCUR0AmJTpAunQoUOTJ09uZAWbzZafnx/IUHa7nTOWABAqpgukn/70p9988402\nvWHDhjVr1qxevTouLk5E9uzZk5GRsWLFCkMLBACTsmiXL5vQ5cuXR4wYsW/fvtozS0pKRo8enZeX\nF8IHcjqdXGUHmBkfAgEy70UNZ8+e7dSpU52ZsbGxNpvt4sWLhpQEAGZm3kCy2+3nzp2rM/PUqVNV\nVVUB/ioSACCEzPvJ26tXr5iYmISEhC1bthQVFRUVFb311ltjxowZNmxYu3btjK4OAEzHdBc11LZz\n586nn35a/3M+ERERjz322MKFC42tCgDMydSBJCL/+7//KyIXL160Wq3sGAGAgcweSJqYmBijSwAA\nszN7IL3yyivZ2dkej0efY7Vav/76awNLAgBzMu9FDSIycuTIP/7xj926dSspKenRo0dUVFRJSYn+\nveYAgJZk3j2koqKic+fOuVyu0tLS5OTkDRs2iMh77723efNmo0sDADMy7x5SWVnZHXfcISJWq1U/\nZDd9+vQDBw5UVlYaWhoAmJF5AykyMlKbaNWqVXl5uc/n0256PB4CCQBannkDqXPnzmfOnBGRqKio\nTp06LV68uKioaNGiRSISGxtrcHEAYD7mPYfUrl279evXa9MbN25MSUl5//33IyMj33zzTWMLAwBz\nMm8giUhCQoI20a1bt927d1dXV7dq1crYkgDAtMx7yO56pBEAGMjUe0iXL1+udz5/QwgAWp55A6m4\nuHj48OHXzw/8K8wBACFk3kByOBzbt2/Xb/p8vpMnT86YMUO/0gEA0JLMG0gi4nA4at/s3Lnzjh07\nxo0bt3fvXqNKAgDT4qKGa8TGxrrdbr7CHABaHoF0jePHj9fU1EREmHrHEQAMYd5P3uLi4meeeab2\nnOrq6sLCwoEDB7Zt29aoqgDAtMwbSCJSXV1d+6bVal2+fHlycrJR9QCAmZk3kBwOR3Z2ttFVAAD+\njnNIAAAlmDeQDh06lJSUlJCQ0Ldv30GDBo0bN+67774zuigAMC+TBlJaWtrkyZMvXLhw++2333PP\nPd26dSsrK5s5c+azzz6rrfDaa68ZWyEAmI0ZzyGtWrVq69atWVlZ48aNqz1/+/btTz/99Ouvv37q\n1KnPP/88IyPDqAoBwIRMGkgvvPBCnTQSkeHDhy9fvjwzM1NEPvjgAyNKAwDzMl0gVVdXV1RU/PM/\n/3O9S8ePHy8in332Wa9evVq2LgAwO9OdQ/L5fCJitdb/xC0Wi4h07NixRWsCAJgwkKKiolq3bt3Q\nBXUHDx4UkZiYmJYtCgBgvkASkZSUlOeee+748eN15p8/f/6RRx5JSkoypCoAMDmL3+83ugYDTJw4\nsaCgoGfPnikpKcOGDdu3b98HH3xQUFDQpUuXL7/8MrSP5XQ6XS5XaMcEEEb4EAiQSQNJRN566603\n33xT/xbz2267bebMmbNnzw75A/FaBEyOD4EAmTeQWgyvRcDk+BAIkBnPIQEAFEQgAQCUQCABAJRA\nIAEAlEAgAQCUYLq/ZRdaPp9v7969Z86c8Xg8U6ZMaeYoFotwrWMwaGCQaGCQaGCIEEhBWbhwYXZ2\n9k9+8pP8/PzmBxIAgEN2QXrppZd27949a9YsowsBgLBHIAXFbrcHOUJurojI6tVBl2JWNDBIWuu0\nNqIZaGAI8ZcaQuDLL79MS0vLy8urd6nT6dQm0tLS0tPT/z7XYmlwOLZIIGhgkGhgkAJoYFZW1uuv\nv65N85caAsEeUhP4fD73VU26o8vlcrlcP6aRiPj92r8nn/CLiEX8+pzQ1nzLutqu0aP8ItIzngY2\n0dV29Yz3i8joUTSwia62yyJ+EXnyiXoamJ6err33jasyzBBITbBly5ZBVzU1kxry0ksiItu2hWQw\nM9Ia+O67RtcRtrTWaW1EM2hvXhoYEhyyC4EbHrK7wY9IXDMaJBoYJBoYpBs1kD+uGiAu+w6Kz+fz\ner1er1dEtH2m4C9zAABzIpCCkp2dnZmZqU3369dPRA4cONDkTOKH0yDRwCDRwCDRwBAhkIKSnJyc\nnJxsdBUAcCvgogYAgBIIJACAEggkAIASCCQAgBIIJACAEggkAIASCCQAgBIIJACAEggkAIASCCQA\ngBIIJACAEggkAIASCCQAgBIIJACAEggkAIASCCQAgBIIJACAEggkAIASCCQAgBIIJACAEggkAIAS\nCCQAgBIIJACAEggkAIASCCQAgBIIJACAEggkAIASCCQAgBIIJACAEggkAIASCCQAgBIIJACAEggk\nAIASCCQAgBIIJACAEggkAIASCCQAgBIIJACAEggkAIASCCQAgBIIJACAEggkAIASIowuILwVFBRs\n3bq1sLAwOjr64YcfHjRokNEVAUC4Yg8pKNOmTSssLBw6dKjdbp8xY8amTZuMrggAwhV7SEH54osv\n2rVrp023b99+xYoVKSkpxpYEAGGKPaSg6GkkIg6Hw+12G1gMAIQ1Aik03G73unXrpkyZYnQhABCu\nCKQm8Pl87qvqLHr++ec7deqUmppa7x2dTqfT6czKyrr5NQJQRVZWlvbeN7qQsGHx+/1G1xA2srOz\n586dq03v3bvXbrdr03PmzDl9+vQ777zTpk2b6+/ldDpdLlfLVQlAMXwIBIiLGpogKSkpKSmpzsx5\n8+YdO3ZszZo19aYRACBABFJQFixYkJeXt2bNmqioKO04nr7bBABoEgIpKB9++KGIDB8+XLsZGRmZ\nl5dnaEUAEK4IpKBwXBgAQoWr7AAASiCQAABKIJAAAEogkAAASiCQAABKIJAAAEogkAAASiCQAABK\nIJAAAEogkAAASiCQAABKIJAAAEogkAAASiCQAABKIJAAAEogkAAASiCQAABKIJAAAEogkAAASiCQ\nAABKIJAAAEogkAAASiCQAABKIJAAAEogkAAASiCQAABKIJAAAEogkAAASiCQAABKIJAAAEogkAAA\nSiCQAABKIJAAAEogkAAASiCQAABKIJAAAEogkAAASiCQAABKIJAAAEogkAAASiCQAABKIJAAAEog\nkAAASogwuoDwtm/fvpycnKKiooiIiJEjRyYlJTVnFItF/P5Ql2YmNDBINDBINDBE2EMKSk5OTllZ\n2dChQ+Pi4hYvXrxkyRKjKwKAcMUeUlAyMzP16T59+sybN2/BggUG1gMA4Ys99e+00AAACfxJREFU\npJCpqKiIi4tr6r1WrxYRefnlkJdjFjQwSFrrtDaiGWhgCFn8HPoMTl5e3saNG8vLy0+dOvXiiy8O\nHDiwzgpOp1ObSEtLS09P//tci6XBEdkigaCBQaKBQQqggVlZWa+//ro27XK5WqCocMceUhP4fD73\nVfrMmJiYAQMGxMXFnT9/fv/+/fXe0eVyuVyuH9NIRPx+7d+TT/hFxCJ+fc5NfhK3iqvtGj3KLyI9\n42lgE11tV894v4iMHkUDm+hquyziF5Enn6ingenp6dp737gqwwx7SE2QnZ09d+5cbXrv3r12u732\n0ry8vEceeWT79u0Oh6P2fKfTeYNXpMVyotAfHx/iak3ixAmJ70kDm48GBimQBt74QwAiQiCFUFVV\n1YABA9atWzdkyJDa8wMJJH4sDQoNDBINDNKNGkggBYhDdkHZuXOnNuH1epcuXRobG5uQkGBsSQAQ\nprjsOyiLFi06e/Zs69atKysre/bsuXLlSqu16RnPD6dBooFBooFBooEhQiAFZcuWLUaXAAC3CA7Z\nAQCUQCAZLysry+gSbkDxChUvT5SvkPKCpH6F4YKr7G66G15go/4VOIpXqHh5onyFlBekW+A9rgj2\nkAAASiCQAABK4JDdTTdjxoxdu3YZXQUAwwwZMmTdunVGVxEGCCQAgBI4ZAcAUAKBBABQAoEEAFAC\ngQQAUAKBBABQAoEEAFACf+3bePv27cvJySkqKoqIiBg5cmRSUpLRFV2joKBg69athYWF0dHRDz/8\n8KBBg4yuqC6fz7d3794zZ854PJ4pU6YYXc41CgoK1q9fX1VVNXbs2DFjxhhdzjVU7ptG8dee4u/c\ncGRbtGiR0TWY3fvvv19WVjZ48GCv17tixYqzZ8/+7Gc/M7qoHyUlJcXExAwdOrSsrGzx4sVdu3b9\n6U9/anRR13jxxRd/97vfnTlz5sMPP5w1a5bR5fzI5XJNnTp11KhRvXr1Wrp0aURERP/+/Y0u6kfK\n9k2n+GtP8XduWPJDJZs3b77nnnuMruIaly5d0qezsrLGjh1rYDH1qqmp8fv9ubm5/fr1M7qWa/zi\nF7/47W9/q03n5ub279/f4/EYW1JtyvZNp/5rT6fgOzcccQ5JLRUVFXFxcUZXcY127drp0w6Hw+12\nG1hMvex2u9El1G/79u2JiYna9IgRI2pqavTvvFeBsn3Tqf/a0yn4zg1HnENSQl5e3saNG8vLy0+d\nOrVs2TKjy6mf2+1et26dmicbFFRVVeXxeOLj47WbVqu1TZs25eXlhhYVrpR97YXFOzeMsIdkAJ/P\n575KmxMTEzNgwIC4uLjz58/v379ftfI0zz//fKdOnVJTU40qTNdQhUrx+/0i4nA49DkRERFer9e4\nisKYOq+9OpR6594C2EMywJYtW+bOnatN79271263d+vWrVu3biLy8MMPP/LII8nJybU/yAwvT0Tm\nzJlz4cKFd955x2azGVWYrt4KVaNVlZ+fn5CQoM25cuVKVFSUoUWFJaVee3Uo9c69BRBIBkhKSmro\nCtHevXuLSGFhoYEv6+vLmzdv3rFjx9asWdOmTRujqqqtkQaqw263d+3a9ezZs9rN4uLiqqoqbfsi\ncKq99hqiwjv3FsAhO+PpJ7q9Xu/SpUtjY2P1n6lVsGDBgry8vDfffDMqKkrNo2TaETztaJhSFaak\npLz99tvV1dUismrVqoEDB+qnlFSgbN90ir/2FH/nhiO+D8l448aNO3v2bOvWrSsrK3v27PnKK6/c\ne++9Rhf1I6fTWftmZGRkXl6eUcXU69NPP83MzKw958CBAyocx3O73ZmZmV9//XXbtm3bt2+/atUq\n7fCOIpTtm07x157i79xwRCApwe12HzlypHfv3q1atTK6FoTY5cuXL126pFQUIVR454YWgQQAUALn\nkAAASiCQAABKIJAAAEogkAAASiCQAABKIJAAAEogkICbZd++fXv37jW6CiBs8LfsABGRV199ddOm\nTd9++20z7rhx40Zt2mq1PvDAA2lpaX369BGRDRs2VFRUqPbF24CyCCRARKS6urqioqJ5d6yurn7j\njTdE5PLlyytWrPiXf/mXzz77rHPnzqGuEbjFEUhAXUePHvV6vU6nc+fOnaWlpT179uzbt28j61ut\n1pEjR2rTffv2nTBhQk5Ozr/+67/qK9Q7ztmzZw8ePFhTU9OpU6ehQ4deX8ORI0dEJDo6evjw4fo3\nLxw6dOjYsWOtW7dOSEiIiYkJyfMFFEEgAXW99dZbFy9evHLlyuXLly0Wy8GDB+fMmfPss88Gcl/t\n73mfOHFCu+l2ux9//PHrx/nDH/7w8ssvDxkyJCIiYufOnX369Fm9erX+jd3Lly9/6623Bg0aFB0d\nffjw4cTExFdffbW6uvo//uM/vvrqq8TExNLS0pMnTy5fvlwPQuAWQCAB9cjNzV2+fHlycrKIvPHG\nG7/73e+eeuqpQL4gLjs7W0T69+/f+DjDhg374YcftAEvX7786KOPrl69evbs2SLidrtXrlyp30tE\niouLRWTZsmXHjh3Lzc3VvnFnxYoVzz///FdffaX4FwUBgeMqO6Aed911l54HkydP9ng8f/7znxta\n2ev1zps3b968ebNnz54zZ86AAQPGjx/f+Dhdu3a12Wxut7ugoODIkSM9evQ4ePBg7TFLSkr0aYfD\n4fP5NmzY8PTTT+vf//Zv//ZvlZWV+lfyALcA9pCAevTo0UOf1k7V1NTUHDx4cMWKFdrMwYMHP/nk\nk3Xu1bFjx//+7/9OSkqyWq2NjCMihw4dmj9/vsvlio6OttlsFRUV+ne72e32jIyM//qv/1q5cmVi\nYuKIESMmTZp08eLFmpqaDz74QNsD01gsluZdiAGoiUACAtWxY8dRo0Zp07W/38hms7366qtNGio9\nPf3+++//wx/+oB21W7Ro0cmTJ/Wls2bNmjJlyvfff//1118vXLhw69atS5YsEZGxY8cOGDBAX+3Z\nZ5/Vri8Hbg0EEhCo22+//ZFHHgl+HLfbferUqRdffFE/KVU7jTSdO3eeOHHixIkTExMT//M//zMr\nK6tDhw4+n2/YsGHBFwCoiXNIQEuz2WwdOnTYunWrz+cTkbVr1+7atUtfevz48Y8++qiqqkpEfD5f\nXl5ehw4dbDZbamrqqlWr/u///k+71+XLlzdu3FhdXW3UswBCjj0koKVZrdYlS5bMmTPn448/FpHE\nxMSJEydeuHBBW+rz+f7nf/5n/vz5UVFRXq83Njb2tddeE5HHH3/c4/EsWLBg3rx5dru9qqrqvvvu\nmzx5spHPBAgpvsIcMIbX692zZ0/v3r07dux4/dLq6uoffviha9eutU9WiYjP5zt+/Hh5eXm/fv3s\ndntLFQu0BAIJAKAEziEBAJRAIAEAlEAgAQCUQCABAJRAIAEAlEAgAQCU8P/i+N5njutVbgAAAABJ\nRU5ErkJggg==\n",
      "text/plain": [
       "<IPython.core.display.Image object>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "clear all; clc; close all\n",
    "% Parâmetros\n",
    "n_bits = 1000;                % Número de bits\n",
    "T = 500;                      % Tempo de símbolo OFDM\n",
    "Ts = 2;                       % Tempo de símbolo em portadora única\n",
    "K = T/Ts;                     % Número de subportadoras independentes\n",
    "N = 2*K;                      % DFT de N pontos\n",
    "sigmas=[0 0.1 1];             % Vetor de variâncias do ruído\n",
    "%\n",
    "% Gerar bits aleatórios\n",
    "dataIn=rand(1,n_bits);   % Sequência de números entre 0 e 1 uniformemente distribuídos\n",
    "dataIn=sign(dataIn-.5);  % Sequência de -1 e 1\n",
    "% Conversor serial paralelo\n",
    "dataInMatrix = reshape(dataIn,n_bits/4,4);\n",
    "%\n",
    "% Gerar constelaçao 16-QAM\n",
    "seq16qam = 2*dataInMatrix(:,1)+dataInMatrix(:,2)+1i*(2*dataInMatrix(:,3)+dataInMatrix(:,4)); \n",
    "seq16=seq16qam';\n",
    "% Garantir propriedadade da simetria\n",
    "X = [seq16 conj(seq16(end:-1:1))]; \n",
    "%\n",
    "% Construindo xn\n",
    "xn = zeros(1,N);\n",
    "for n=0:N-1\n",
    "    for k=0:N-1\n",
    "        xn(n+1) = xn(n+1) + 1/sqrt(N)*X(k+1)*exp(1i*2*pi*n*k/N);\n",
    "    end\n",
    "end\n",
    "% \n",
    "% Loop de variâncias\n",
    "for ik = 1:length(sigmas)\n",
    "    %\n",
    "    % Adição de ruído\n",
    "    variance = sigmas(ik);\n",
    "    noise = sqrt(variance)*randn(1,N)+1i*sqrt(variance)*randn(1,N);\n",
    "    %\n",
    "    % sinal recebido = xn + ruído \n",
    "    rn = xn+noise;\n",
    "    % DFT de rn\n",
    "    Y = zeros(1,K);\n",
    "    for k=0:K-1\n",
    "        for n=0:N-1\n",
    "            Y(1,k+1) = Y(1,k+1) + 1/sqrt(N)*rn(n+1)*exp(-1i*2*pi*k*n/N);\n",
    "        end\n",
    "    end\n",
    "    %\n",
    "    % Plots\n",
    "    scatterplot(Y)\n",
    "    hold on\n",
    "    scatter(real(seq16),imag(seq16), 'r', '+')\n",
    "    hold off\n",
    "    title(['Sinal com ruído de variância ', num2str(variance)]);\n",
    "    % Demodulação  \n",
    "    for k= 1:length(Y) % Para percorrer todo o vetor Yk \n",
    "        if real(Y(1,k)) > 0 % Para parte real de Yk positiva\n",
    "            if real(Y(1,k)) > 2\n",
    "                Z(1,k) = 3;\n",
    "            else\n",
    "                Z(1,k) = 1;\n",
    "            end\n",
    "        else % Para parte real de Yk negativa ou igual a zero\n",
    "            if real(Y(1,k)) < -2\n",
    "                 Z(1,k) = -3;\n",
    "            else\n",
    "                 Z(1,k) = -1;\n",
    "            end\n",
    "        end\n",
    "\n",
    "        if imag(Y(1,k)) > 0 % Para parte imaginaria de Yk positiva\n",
    "            if imag(Y(1,k)) > 2\n",
    "                Z(1,k) = Z(1,k) + 1i*3;\n",
    "            else\n",
    "                Z(1,k) = Z(1,k) + 1i;\n",
    "            end\n",
    "        else % Para parte imaginaria de Yk negativa ou igual a zero\n",
    "            if imag(Y(1,k)) < -2\n",
    "                 Z(1,k) = Z(1,k) - 1i*3;\n",
    "            else\n",
    "                 Z(1,k) = Z(1,k) - 1i;\n",
    "            end\n",
    "        end\n",
    "    end\n",
    "    % Contagem de erro\n",
    "    error = length(find(Z(1,2:K)-X(1,2:K)));\n",
    "    disp(['Para variância de ', num2str(variance), ' houve ', num2str(error), ' símbolos errados.']);\n",
    "end"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Comentários sobre o código\n",
    "\n",
    "- Inicialmente, definimos as variáveis de entrada do programa. O destaque é para a variável **sigmas**, que define os valores de variância do ruído a serem simulados.\n",
    ">```python\n",
    "clear all; clc; close all\n",
    "% Parâmetros\n",
    "n_bits = 1000;                % Número de bits\n",
    "T = 500;                      % Tempo de símbolo OFDM\n",
    "Ts = 2;                       % Tempo de símbolo em portadora única\n",
    "K = T/Ts;                     % Número de subportadoras independentes\n",
    "N = 2*K;                      % DFT de N pontos\n",
    "sigmas=[0 0.1 1];             % Vetor de variâncias do ruído\n",
    "...\n",
    "```\n",
    "\n",
    "- Em seguida, vamos gerar os $1000$ bits aleatórios, os símbolos da constelação 16-QAM e o sinal $x_{n}$ , da mesma forma que fizemos na **Prática 2**.\n",
    ">```python\n",
    "...\n",
    "% Gerar bits aleatórios\n",
    "dataIn=rand(1,n_bits);   % Sequência de números entre 0 e 1 uniformemente distribuídos\n",
    "dataIn=sign(dataIn-.5);  % Sequência de -1 e 1\n",
    "% Conversor serial paralelo\n",
    "dataInMatrix = reshape(dataIn,n_bits/4,4);\n",
    "%\n",
    "% Gerar constelaçao 16-QAM\n",
    "seq16qam = 2*dataInMatrix(:,1)+dataInMatrix(:,2)+1i*(2*dataInMatrix(:,3)+dataInMatrix(:,4)); \n",
    "seq16=seq16qam';\n",
    "% Garantir propriedadade da simetria\n",
    "X = [seq16 conj(seq16(end:-1:1))]; \n",
    "%\n",
    "% Construindo xn\n",
    "xn = zeros(1,N);\n",
    "for n=0:N-1\n",
    "    for k=0:N-1\n",
    "        xn(n+1) = xn(n+1) + 1/sqrt(N)*X(k+1)*exp(1i*2*pi*n*k/N);\n",
    "    end\n",
    "end\n",
    "...\n",
    "```\n",
    "\n",
    "- Em seguida, entramos em um loop, e para cada valor de **sigmas**, realizamos as etapas a seguir.\n",
    "\n",
    "- Geramos o ruído AWGN complexo, que possui influência no eixo imaginário e real, isto é, influencia na amplitude e na fase do sinal. Utilizando a raiz da variância (desvio padrão ou potência do ruído) para gerar amostras em amplitude.  Assim, geraremos o ruído e o adiconamos ao sinal $x_{n}$, obtendo o sinal recebido $r_{n}$.\n",
    "\n",
    ">```python\n",
    "...\n",
    "% Loop de variâncias\n",
    "for ik = 1:length(sigmas)\n",
    "    %\n",
    "    % Adição de ruído\n",
    "    variance = sigmas(ik);\n",
    "    noise = sqrt(variance)*randn(1,N)+1i*sqrt(variance)*randn(1,N);\n",
    "    %\n",
    "    % sinal recebido = xn + ruído \n",
    "    rn = xn+noise;\n",
    "    ...\n",
    "end\n",
    "```\n",
    "\n",
    "- Com o sinal recebido amostrado $r_{n}$ , vamos calcular sua DFT, obtendo $Y_{k}$, da seguinte maneira:\n",
    "$$ Y_{k} = \\frac{1}{\\sqrt{N}} \\cdot \\sum_{n=0}^{N-1} r_{n} e^{-j2\\pi k \\frac{n}{N}}$$\n",
    "\n",
    ">```python\n",
    "...\n",
    "% Loop de variâncias\n",
    "for ik = 1:length(sigmas)\n",
    "    ...\n",
    "    % DFT de rn\n",
    "    Y = zeros(1,K);\n",
    "    for k=0:K-1\n",
    "        for n=0:N-1\n",
    "            Y(1,k+1) = Y(1,k+1) + 1/sqrt(N)*rn(n+1)*exp(-1i*2*pi*k*n/N);\n",
    "        end\n",
    "    end\n",
    "    ...\n",
    "end\n",
    "```\n",
    "\n",
    "- Com isso, já podemos plotar $Y_{k}$ e os valores da constelação 16-QAM utilizando as funções scatterplot e scatter. Os gráficos obtidos para diferentes variâncias são mostrados na sequência, pois estão dentro do loop. O sinal enviado, $seq16$, é representado com cruzes vermelhas e o sinal recebido $Y_{k}$ com círculos azuis.\n",
    "\n",
    ">```python\n",
    "...\n",
    "% Loop de variâncias\n",
    "for ik = 1:length(sigmas)\n",
    "    ...\n",
    "    % Plots\n",
    "    scatterplot(Y)\n",
    "    hold on\n",
    "    scatter(real(seq16),imag(seq16), 'r', '+')\n",
    "    hold off\n",
    "    title(['Sinal com ruído de variância ', num2str(variance)]);\n",
    "    ...\n",
    "```\n",
    "\n",
    "- Na sequência é realizado o processo de demodulação, isolando a parte real e imaginário de $Y$ e comparando com os valores das regiões da constelação do 16-QAM.\n",
    ">```python\n",
    "...\n",
    "% Loop de variâncias\n",
    "for ik = 1:length(sigmas)\n",
    "    ...\n",
    "    % Demodulação  \n",
    "    for k= 1:length(Y) % Para percorrer todo o vetor Yk \n",
    "        if real(Y(1,k)) > 0 % Para parte real de Yk positiva\n",
    "            if real(Y(1,k)) > 2\n",
    "                Z(1,k) = 3;\n",
    "            else\n",
    "                Z(1,k) = 1;\n",
    "            end\n",
    "        else % Para parte real de Yk negativa ou igual a zero\n",
    "            if real(Y(1,k)) < -2\n",
    "                 Z(1,k) = -3;\n",
    "            else\n",
    "                 Z(1,k) = -1;\n",
    "            end\n",
    "        end\n",
    "\n",
    "        if imag(Y(1,k)) > 0 % Para parte imaginaria de Yk positiva\n",
    "            if imag(Y(1,k)) > 2\n",
    "                Z(1,k) = Z(1,k) + 1i*3;\n",
    "            else\n",
    "                Z(1,k) = Z(1,k) + 1i;\n",
    "            end\n",
    "        else % Para parte imaginaria de Yk negativa ou igual a zero\n",
    "            if imag(Y(1,k)) < -2\n",
    "                 Z(1,k) = Z(1,k) - 1i*3;\n",
    "            else\n",
    "                 Z(1,k) = Z(1,k) - 1i;\n",
    "            end\n",
    "        end\n",
    "    end\n",
    "    % Contagem de erro\n",
    "    error = length(find(Z(1,2:K)-X(1,2:K)));\n",
    "    disp(['Para variância de ', num2str(variance), ' houve ', num2str(error), ' símbolos errados.']);\n",
    "end\n",
    "```\n",
    "\n",
    "- O último passo é comparar os vetores transmitidos com os recebidos, e contabilizar o número de símbolos errados.\n",
    ">```python\n",
    "...\n",
    "% Loop de variâncias\n",
    "for ik = 1:length(sigmas)\n",
    "    ...\n",
    "    % Contagem de erro\n",
    "    error = length(find(Z(1,2:K)-X(1,2:K)));\n",
    "    disp(['Para variância de ', num2str(variance), ' houve ', num2str(error), ' símbolos errados.']);\n",
    "end\n",
    "```\n",
    "\n",
    "- Analisando os gráficos, percebemos que, quanto maior a variância do ruído, mais espalhados se encontram os sinais recebidos, e maiores são as chances de obtermos erros no bloco de decisão. No caso da variância igual a $0$, todos os pontos que chegam ao receptor são iguais ao da constelação original, ou seja, não erros."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Entrega 01: loopback OFDM em canais AWGN\n",
    "\n",
    "Faça um loopback de tranmissão e recepção OFDM em Python (ou Matlab) com as seguintes mudanças:\n",
    "\n",
    "1. Eb/No como variável de entrada. Variar a Eb/No de 0 a 14 dB e calcular a variância do ruído, considerando modulação BPSK e 16-QAM;\n",
    "2. Usar as funções ifft e fft para multiplexar (Tx) e demultiplexar (Rx);\n",
    "3. Fazer o gráfico da BER vs Eb/No para com OFDM e, no mesmo gráfico, o gráfico da Pe vs Eb/No (fórmula teórica) das modulações BPSK e 16-QAM com e sem OFDM.\n",
    "\n",
    "Discuta no seu vídeo os seguintes pontos (pode preparar uma apresentação no power point para facilitar a exposição):\n",
    "\n",
    "- Exposição da formulação matemática da probabilidade de erro de bit (Pe) teórica. Não precisa prova matemática, mas a exposição da formulação, e a citação da referência de cada modulação;\n",
    "- Apresentação da formulação matemática do cálculo da potência do ruído para cada modulação (citar referências utilizadas);\n",
    "- Apresentação e discussão dos gráficos de desempenho: comparação de desempenho das curvas com e sem OFDM;\n",
    "- Apresentação e discussão dos gráficos de desempenho: comparação das curvas teóricas e de simulação; \n",
    "- Apresentação e discussão dos gráficos de desempenho: comparação entre o desempenho das diferentes modulações.\n",
    "\n",
    "Faça um vídeo youtube, de no máximo 5 minutos, contendo a discussão acima e do código implementado (explicar brevemente o que foi feito, mostrar as formulações, mostrar como rodar o código e os gráficos gerados). O link do vídeo deve ser informado no arquivo README.txt. O vídeo é parte crucial da avaliação.\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Bibliografia\n",
    "\n",
    "- Carleton University. Laboratory 1 simulation of a simple digital communication system, 2014.\n",
    "- Mathuranathan Viswanathan. Simulation of Difital Communication Systems Using MATLAB. Mathuranathan Viswanathan at Gaussianwaves, 2014.\n",
    "- PROAKIS, J. G., SALEHI, M., BAUCH, G. Modern Communication Systems Using Matlab, 3a edição. Cengage Learning, 2013 (título alternativo: Contemporary Communication Systems Using MATLAB).\n"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Matlab",
   "language": "matlab",
   "name": "matlab"
  },
  "language_info": {
   "codemirror_mode": "octave",
   "file_extension": ".m",
   "help_links": [
    {
     "text": "MetaKernel Magics",
     "url": "https://github.com/calysto/metakernel/blob/master/metakernel/magics/README.md"
    }
   ],
   "mimetype": "text/x-matlab",
   "name": "matlab",
   "version": "0.14.3"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
